﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LibNiconico.NiconicoApi.Alert
{
    /// <summary>
    /// アラートAPIエラーコード
    /// </summary>
    public enum NicoAlertErrorCode
    {
        /// <summary>
        /// 設定なし
        /// </summary>
        None,

        /// <summary>
        /// メールアドレス、パスワードの不正
        /// </summary>
        InvalidMailOrPassword,

        /// <summary>
        /// 誤まったアカウントデータ
        /// </summary>
        IncorrectAccountData,

        /// <summary>
        /// 許可されていないアクセス
        /// </summary>
        NotPermitted,

        /// <summary>
        /// 未定義のエラー
        /// </summary>
        Undefined,
    }

    /// <summary>
    /// アラートAPIエラー
    /// </summary>
    public class NicoAlertError
    {
        private string baseCode;

        /// <summary>
        /// エラーコード
        /// </summary>
        public NicoAlertErrorCode Code
        {

            get;
            private set;
        }

        /// <summary>
        /// 詳細
        /// </summary>
        public string Description
        {
            get;
            private set;
        }

        /// <summary>
        /// APIから返された元のコードを取得
        /// </summary>
        /// <returns></returns>
        public string GetBaseCode()
        {
            return this.baseCode;
        }

        private NicoAlertError(NicoAlertErrorCode code, string baseCode,string description)
        {
            this.Code = code;
            this.baseCode = baseCode;
            this.Description = description;
        }

        internal static NicoAlertError Parse(string baseCode)
        {
            switch (baseCode)
            {
                case "":
                    return new NicoAlertError(NicoAlertErrorCode.None, baseCode,"設定されていません");

                case "1":
                    return new NicoAlertError(NicoAlertErrorCode.InvalidMailOrPassword, baseCode,"メールアドレスまたはパスワードが間違っているため、ログインできません");

                case "incorrect_account_data":
                    return new NicoAlertError(NicoAlertErrorCode.IncorrectAccountData, baseCode, "誤まったアカウントデータです");

                case "not_permitted":

                    return new NicoAlertError(NicoAlertErrorCode.NotPermitted,baseCode,"許可されていないアクセスです");


                default:
                    return new NicoAlertError(NicoAlertErrorCode.Undefined, baseCode,"未定義のエラーです");
            }
        }

    }
}
